/*
 * Iterador.cpp
 *
 *  Created on: Apr 29, 2012
 *      Author: Nico
 */

#ifndef ITERADOR_H_
#define ITERADOR_H_

#include "Iterador.h"

template <class Generic>
Iterador<Generic>::Iterador(ListaEnlazada<Generic>* unaLista , Nodo<Generic>* primer_nodo){
	this->lista = unaLista;
	this->nodo = primer_nodo;
}

template <class Generic>
Iterador<Generic>::~Iterador(){
	this->lista = NULL;
	this->nodo = NULL;
}

template <class Generic>
Generic Iterador<Generic>::get_first(){
	Generic value;
	this->lista->index(0,value);
	return value;
}

template <class Generic>
Generic Iterador<Generic>::get_last(){
	Nodo<Generic>* unNodo = this->nodo;
	
	while( unNodo->has_next() ){
		unNodo->get_next(&unNodo);
	}
	return unNodo->get_value();
}

template <class Generic>
Generic Iterador<Generic>::get_next(){
	Generic value = this->nodo->get_value();
	this->nodo->get_next( &this->nodo );
	return value;
}

template <class Generic>
void Iterador<Generic>::reset(){
	this->nodo = this->primerNodo;
}

template <class Generic>
bool Iterador<Generic>::hay_mas_elementos(){
	return this->nodo != NULL;
}

template <class Generic>
int Iterador<Generic>::get_length(){
	return this->lista->get_length();
}


#endif /* ITERADOR_H_ */
